package com.linhai.scm.service;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import com.linhai.general.Page;

public interface IBaseService<T> {
	/**
	 * 增加数据
	 * @param entity 要插入的数据实体
	 * @return 插入后生成的主键
	 */
	Serializable insert(T entity);
	
	/**
	 * 删除数据
	 * @param id 要删除的数据实体ID
	 */
    void delete(Serializable id);
    
    /**
     * 批量删除
     * @param ids
     */
    void delete(List<Serializable> ids);
    
    /**
     * 更新数据
     * @param entity 要更新的数据实体
     */
    void update(T entity);
    
	/**
	 * 根据 主键ID 获取实体
	 * @param id 主键
	 * @return 实体
	 */
	T get(Serializable id);
	
	/**
	 * 根据查询条件 获取实体
	 * @param values 需要查询的条件
	 * @return 实体
	 */
	T get(Map<String,Object> values);
	
	/**
	 * 根据 主键ID 获取实体
	 * @param id 主键
	 * @return 实体
	 */
	T load(Serializable id);
	
	List<T> loadAll();
	
	/**
	 * 获取所有数据集合
	 * @param values 要查询的条件
	 * @return 数据集合
	 */
	List<T> getList(Map<String,Object> values);
	
	/**
	 * 获取所有数据集合
	 * @return 数据集合
	 */
	List<T> getList();
	
	/**
	 * 获取记录条数
	 * @param values 要查询的条件
	 * @return 返回记录条数
	 */
	int getCount(Map<String,Object> values);
	
	/**
	 * 使用hql 语句进行分页查询操作
	 * @param curPage 当前页码
	 * @param pageSize 每页需要显示的记录数
	 * @param values 要查询的条件
	 * @return 当前页的所有记录
	 */
	List<T> findByPage(Page page,Map<String,Object> values);

}
